package com.cn.transfer.common.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

/**
 * 销售订单
 * 
 * 用于存储销售订单相关信息的实体类。
 * 
 * JSON示例：
 * {
 *     "voucherID": "161",
 *     "voucherCode": "SO-20211214-001",
 *     ...
 * }
 * 
 * 使用 @JsonIgnoreProperties 注解来忽略未知属性。
 * 
 * @author
 * @date 2023/8/23 14:30  // 请手动更新为当前时间
 * @description 用于存储销售订单相关信息的实体类。
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SalesOrder {
    /**
     * 销售订单ID。
     */
    private String voucherID;

    /**
     * 销售订单编码。
     */
    private String voucherCode;

    /**
     * 外部编码。
     */
    private String externalCode;

    /**
     * 销售订单日期。
     */
    private String voucherDate;

    /**
     * 业务类型。
     */
    private BusinessType businessType;

    /**
     * 合作伙伴信息。
     */
    private Partner partner;

    /**
     * 备注。
     */
    private String memo;

    /**
     * 时间戳。
     */
    private String ts;

    /**
     * 销售订单明细。
     */
    private List<SalesOrderDetail> details;
    
    /**
     * 业务类型实体类。
     */
    @Data
    public static class BusinessType {
        /**
         * 业务类型编码。
         */
        private String code;

        /**
         * 业务类型名称。
         */
        private String name;
    }

    /**
     * 合作伙伴实体类。
     */
    @Data
    public static class Partner {
        /**
         * 合作伙伴编码。
         */
        private String code;

        /**
         * 合作伙伴名称。
         */
        private String name;
    }

    /**
     * 销售订单明细实体类。
     */
    @Data
    public static class SalesOrderDetail {
        /**
         * 库存信息。
         */
        private Inventory inventory;

        /**
         * 库存条形码。
         */
        private String inventoryBarCode;

        /**
         * 单位信息。
         */
        private Unit unit;

        /**
         * 数量。
         */
        private double quantity;
    }

    /**
     * 库存信息实体类。
     */
    @Data
    public static class Inventory {
        /**
         * 库存编码。
         */
        private String code;

        /**
         * 库存名称。
         */
        private String name;
    }

    /**
     * 单位信息实体类。
     */
    @Data
    public static class Unit {
        /**
         * 单位名称。
         */
        private String name;
    }
}
